{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Imports\n",
    "\n",
    "Import all the modules and functionalities we need."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "# Import standard libraries.\n",
    "import os\n",
    "\n",
    "# Import third party libraries.\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "from statsmodels.stats.multitest import multipletests\n",
    "\n",
    "# Import custom libraries/scripts.\n",
    "import annotations\n",
    "import helpers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Loading data\n",
    "\n",
    "Fetch all our relevant data for the current analysis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Set working contants.\n",
    "EXPERIMENTS_PATH = r'D:\\Miguel\\PhD\\Results\\Competition\\DL\\small_arenas\\progeny_fitness\\processed'\n",
    "FPS = 60\n",
    "INK = 'black'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Set figure configurations.\n",
    "sns.set(\n",
    "        context='paper',\n",
    "        style='ticks',\n",
    "        font='sans-serif',\n",
    "        font_scale=1.0, \n",
    "        rc={\n",
    "            'axes.axisbelow': True,\n",
    "            'axes.edgecolor': INK,\n",
    "            'axes.facecolor': 'white' if INK=='black' else 'black',\n",
    "            'axes.grid': False,\n",
    "            'axes.labelcolor': INK,\n",
    "            'axes.labelsize': 13.0,\n",
    "            'axes.labelweight': 'normal',\n",
    "            'axes.linewidth': 1.0,\n",
    "            'axes.spines.left': True,\n",
    "            'axes.spines.bottom': True,\n",
    "            'axes.spines.top': False,\n",
    "            'axes.spines.right': False,\n",
    "            'axes.titlepad': 15.0,\n",
    "            'axes.titlesize': 20.0,\n",
    "            'axes.titleweight': 'bold',\n",
    "            'figure.facecolor': 'white' if INK=='black' else 'black',\n",
    "            'figure.figsize': [4.0, 4.0],\n",
    "            'figure.titlesize': 30.0,\n",
    "            'figure.titleweight': 'bold',\n",
    "            'font.family': ['sans-serif'],\n",
    "            'font.sans-serif': ['Arial'],\n",
    "            'legend.frameon': False,\n",
    "            'legend.fontsize': 11.0,\n",
    "            'lines.color': INK,\n",
    "            'lines.linewidth': 1.0,\n",
    "            'patch.edgecolor': INK,\n",
    "            'savefig.dpi': 300,\n",
    "            'savefig.format': 'png',\n",
    "            'savefig.bbox': 'tight',\n",
    "            'savefig.transparent': True,\n",
    "            'text.color': INK,\n",
    "            'text.usetex': False,\n",
    "            'xtick.color': INK,\n",
    "            'xtick.direction': 'out',\n",
    "            'xtick.labelsize': 12.0,\n",
    "            'xtick.major.pad': 5.0,\n",
    "            'xtick.major.size': 0.0,\n",
    "            'xtick.major.width': 1.0,\n",
    "            'xtick.minor.size': 0.0,\n",
    "            'xtick.minor.width': 0.4,\n",
    "            'ytick.color': INK,\n",
    "            'ytick.direction': 'out',\n",
    "            'ytick.labelsize': 12.0,\n",
    "            'ytick.major.pad': 5.0,\n",
    "            'ytick.major.size': 3.0,\n",
    "            'ytick.major.width': 1.0,\n",
    "            'ytick.minor.size': 0.0,\n",
    "            'ytick.minor.width': 0.4\n",
    "           }\n",
    "       )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Folder already exists, skipping.\n"
     ]
    }
   ],
   "source": [
    "# Prepare the Figures folder to save our graphs in.\n",
    "savepath = os.path.join(r'C:\\Users\\Miguel\\Desktop\\paper_data', 'paper_figures', 'figure2')\n",
    "try:\n",
    "    os.makedirs(savepath)\n",
    "    print('New folder created.')\n",
    "except FileExistsError:\n",
    "    print('Folder already exists, skipping.')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Paths to conditions:\n",
      " ['\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition', '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition', '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair']\n"
     ]
    }
   ],
   "source": [
    "# Set the conditions to analyze.\n",
    "condition_order = ['free_competition', 'partitioned_competition', 'single_pair']\n",
    "conditions = [item.path for item in os.scandir(EXPERIMENTS_PATH) if item.name in condition_order]\n",
    "print('Paths to conditions:\\n', conditions)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\t\n",
      " free_competition\n",
      "\t\n",
      " partitioned_competition\n",
      "First copulation ends after partition removal: video_2021-10-25T10_37_53_arena5.csv\n",
      "First copulation ends after partition removal: video_2021-10-25T11_52_36_arena13.csv\n",
      "First copulation ends after partition removal: video_2021-11-02T10_42_41_arena8.csv\n",
      "First copulation ends after partition removal: video_2021-11-02T11_47_10_arena5.csv\n",
      "\t\n",
      " single_pair\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'free_competition': ['\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-25T10_37_53_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-25T10_37_53_arena2.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-25T10_37_53_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-25T10_37_53_arena6.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-25T11_52_36_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-25T11_52_36_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-25T11_52_36_arena15.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-25T11_52_36_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-25T11_52_36_arena6.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-27T10_43_03_arena14.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-27T10_43_03_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-27T10_43_03_arena6.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-27T10_43_03_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-27T11_53_59_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-27T11_53_59_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-27T11_53_59_arena14.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-27T11_53_59_arena15.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-27T11_53_59_arena2.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-27T11_53_59_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-27T11_53_59_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-28T10_32_16_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-28T10_32_16_arena14.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-28T10_32_16_arena15.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-28T11_44_57_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-10-28T11_44_57_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-11-02T10_42_41_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-11-02T10_42_41_arena14.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-11-02T10_42_41_arena15.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-11-02T10_42_41_arena6.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-11-02T11_47_10_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-11-02T11_47_10_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-11-04T10_48_15_arena2.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-11-04T10_48_15_arena6.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\free_competition\\\\video_2021-11-04T11_51_18_arena10.csv'],\n",
       " 'partitioned_competition': ['\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-25T10_37_53_arena1.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-25T10_37_53_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-25T10_37_53_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-25T10_37_53_arena4.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-25T10_37_53_arena8.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-25T11_52_36_arena1.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-25T11_52_36_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-25T11_52_36_arena8.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-25T11_52_36_arena9.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-27T10_43_03_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-27T10_43_03_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-27T10_43_03_arena4.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-27T10_43_03_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-27T10_43_03_arena8.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-27T10_43_03_arena9.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-27T11_53_59_arena1.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-27T11_53_59_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-28T10_32_16_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-28T10_32_16_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-28T10_32_16_arena4.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-28T11_44_57_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-10-28T11_44_57_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-11-02T10_42_41_arena1.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-11-02T10_42_41_arena4.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-11-02T10_42_41_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-11-04T10_48_15_arena8.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-11-04T11_51_18_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\partitioned_competition\\\\video_2021-11-04T11_51_18_arena9.csv'],\n",
       " 'single_pair': ['\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T10_48_15_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T10_48_15_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T10_48_15_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T10_48_15_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T10_48_15_arena15.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T10_48_15_arena16.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T10_48_15_arena9.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T11_51_18_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T11_51_18_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T11_51_18_arena15.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T11_51_18_arena16.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T11_51_18_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T11_51_18_arena4.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T11_51_18_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-04T11_51_18_arena8.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T10_39_06_arena1.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T10_39_06_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T10_39_06_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T10_39_06_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T10_39_06_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T10_39_06_arena14.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T10_39_06_arena16.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T10_39_06_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T10_39_06_arena4.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T10_39_06_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T10_39_06_arena6.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T10_39_06_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T10_39_06_arena8.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T10_39_06_arena9.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T11_43_44_arena1.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T11_43_44_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T11_43_44_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T11_43_44_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T11_43_44_arena2.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T11_43_44_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T11_43_44_arena4.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T11_43_44_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T11_43_44_arena6.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T11_43_44_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\progeny_fitness\\\\processed\\\\single_pair\\\\video_2021-11-05T11_43_44_arena9.csv']}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load all usable experiments for each condition.\n",
    "experiments = {condition: [] for condition in condition_order}\n",
    "\n",
    "for condition_path in conditions:\n",
    "    \n",
    "    condition = os.path.basename(condition_path)\n",
    "    print('\\t\\n', condition)\n",
    "    \n",
    "    for item in os.scandir(condition_path):\n",
    "        if item.name.endswith('.csv'):\n",
    "            \n",
    "            annotation_video = annotations.read(item.path)\n",
    "\n",
    "            try:\n",
    "                copulation_track = annotation_video[0].events\n",
    "                \n",
    "                for copulation in copulation_track:\n",
    "\n",
    "                    # Filter out videos where copulation lasts less than 8 minutes.\n",
    "                    copulation_duration = copulation.duration\n",
    "                    if copulation_duration <= 8 * 60 * FPS:\n",
    "                        print('Copulation too short:', item.name)\n",
    "                        continue\n",
    "                    \n",
    "                if condition=='partitioned_competition':\n",
    "                    first_copulation = copulation_track[0]\n",
    "                    if first_copulation.time_interval[1] > (30 * 60 * FPS):\n",
    "                        if item.name != 'video_2021-11-02T10_42_41_arena1.csv':\n",
    "                            print('First copulation ends after partition removal:', item.name)\n",
    "                            continue\n",
    "            \n",
    "            except IndexError:\n",
    "                continue\n",
    "            \n",
    "            experiments[condition].append(item.path)\n",
    "\n",
    "experiments"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Copulation Analysis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Iteration: 0 \n",
      "Experiment: video_2021-10-25T10_37_53_arena10.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 1 \n",
      "Experiment: video_2021-10-25T10_37_53_arena2.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 2 \n",
      "Experiment: video_2021-10-25T10_37_53_arena3.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 3 \n",
      "Experiment: video_2021-10-25T10_37_53_arena6.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 4 \n",
      "Experiment: video_2021-10-25T11_52_36_arena10.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 5 \n",
      "Experiment: video_2021-10-25T11_52_36_arena11.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 6 \n",
      "Experiment: video_2021-10-25T11_52_36_arena15.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 7 \n",
      "Experiment: video_2021-10-25T11_52_36_arena3.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 8 \n",
      "Experiment: video_2021-10-25T11_52_36_arena6.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 9 \n",
      "Experiment: video_2021-10-27T10_43_03_arena14.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 10 \n",
      "Experiment: video_2021-10-27T10_43_03_arena3.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 11 \n",
      "Experiment: video_2021-10-27T10_43_03_arena6.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 12 \n",
      "Experiment: video_2021-10-27T10_43_03_arena7.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 13 \n",
      "Experiment: video_2021-10-27T11_53_59_arena10.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 14 \n",
      "Experiment: video_2021-10-27T11_53_59_arena11.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 15 \n",
      "Experiment: video_2021-10-27T11_53_59_arena14.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 16 \n",
      "Experiment: video_2021-10-27T11_53_59_arena15.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 17 \n",
      "Experiment: video_2021-10-27T11_53_59_arena2.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 18 \n",
      "Experiment: video_2021-10-27T11_53_59_arena3.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 19 \n",
      "Experiment: video_2021-10-27T11_53_59_arena7.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 20 \n",
      "Experiment: video_2021-10-28T10_32_16_arena11.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 21 \n",
      "Experiment: video_2021-10-28T10_32_16_arena14.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 22 \n",
      "Experiment: video_2021-10-28T10_32_16_arena15.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 23 \n",
      "Experiment: video_2021-10-28T11_44_57_arena11.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 24 \n",
      "Experiment: video_2021-10-28T11_44_57_arena3.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 25 \n",
      "Experiment: video_2021-11-02T10_42_41_arena10.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 26 \n",
      "Experiment: video_2021-11-02T10_42_41_arena14.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 27 \n",
      "Experiment: video_2021-11-02T10_42_41_arena15.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 28 \n",
      "Experiment: video_2021-11-02T10_42_41_arena6.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 29 \n",
      "Experiment: video_2021-11-02T11_47_10_arena10.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 30 \n",
      "Experiment: video_2021-11-02T11_47_10_arena7.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 31 \n",
      "Experiment: video_2021-11-04T10_48_15_arena2.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 32 \n",
      "Experiment: video_2021-11-04T10_48_15_arena6.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 33 \n",
      "Experiment: video_2021-11-04T11_51_18_arena10.csv \n",
      "Condition: free_competition \n",
      "\n",
      "Iteration: 0 \n",
      "Experiment: video_2021-10-25T10_37_53_arena1.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 1 \n",
      "Experiment: video_2021-10-25T10_37_53_arena12.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 2 \n",
      "Experiment: video_2021-10-25T10_37_53_arena13.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 3 \n",
      "Experiment: video_2021-10-25T10_37_53_arena4.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 4 \n",
      "Experiment: video_2021-10-25T10_37_53_arena8.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 5 \n",
      "Experiment: video_2021-10-25T11_52_36_arena1.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 6 \n",
      "Experiment: video_2021-10-25T11_52_36_arena5.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 7 \n",
      "Experiment: video_2021-10-25T11_52_36_arena8.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 8 \n",
      "Experiment: video_2021-10-25T11_52_36_arena9.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 9 \n",
      "Experiment: video_2021-10-27T10_43_03_arena12.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 10 \n",
      "Experiment: video_2021-10-27T10_43_03_arena13.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 11 \n",
      "Experiment: video_2021-10-27T10_43_03_arena4.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 12 \n",
      "Experiment: video_2021-10-27T10_43_03_arena5.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 13 \n",
      "Experiment: video_2021-10-27T10_43_03_arena8.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 14 \n",
      "Experiment: video_2021-10-27T10_43_03_arena9.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 15 \n",
      "Experiment: video_2021-10-27T11_53_59_arena1.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 16 \n",
      "Experiment: video_2021-10-27T11_53_59_arena5.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 17 \n",
      "Experiment: video_2021-10-28T10_32_16_arena12.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 18 \n",
      "Experiment: video_2021-10-28T10_32_16_arena13.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 19 \n",
      "Experiment: video_2021-10-28T10_32_16_arena4.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 20 \n",
      "Experiment: video_2021-10-28T11_44_57_arena12.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 21 \n",
      "Experiment: video_2021-10-28T11_44_57_arena5.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 22 \n",
      "Experiment: video_2021-11-02T10_42_41_arena1.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 23 \n",
      "Experiment: video_2021-11-02T10_42_41_arena4.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 24 \n",
      "Experiment: video_2021-11-02T10_42_41_arena5.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 25 \n",
      "Experiment: video_2021-11-04T10_48_15_arena8.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 26 \n",
      "Experiment: video_2021-11-04T11_51_18_arena13.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 27 \n",
      "Experiment: video_2021-11-04T11_51_18_arena9.csv \n",
      "Condition: partitioned_competition \n",
      "\n",
      "Iteration: 0 \n",
      "Experiment: video_2021-11-04T10_48_15_arena10.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 1 \n",
      "Experiment: video_2021-11-04T10_48_15_arena11.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 2 \n",
      "Experiment: video_2021-11-04T10_48_15_arena12.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 3 \n",
      "Experiment: video_2021-11-04T10_48_15_arena13.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 4 \n",
      "Experiment: video_2021-11-04T10_48_15_arena15.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 5 \n",
      "Experiment: video_2021-11-04T10_48_15_arena16.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 6 \n",
      "Experiment: video_2021-11-04T10_48_15_arena9.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 7 \n",
      "Experiment: video_2021-11-04T11_51_18_arena11.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 8 \n",
      "Experiment: video_2021-11-04T11_51_18_arena12.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 9 \n",
      "Experiment: video_2021-11-04T11_51_18_arena15.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 10 \n",
      "Experiment: video_2021-11-04T11_51_18_arena16.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 11 \n",
      "Experiment: video_2021-11-04T11_51_18_arena3.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 12 \n",
      "Experiment: video_2021-11-04T11_51_18_arena4.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 13 \n",
      "Experiment: video_2021-11-04T11_51_18_arena7.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 14 \n",
      "Experiment: video_2021-11-04T11_51_18_arena8.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 15 \n",
      "Experiment: video_2021-11-05T10_39_06_arena1.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 16 \n",
      "Experiment: video_2021-11-05T10_39_06_arena10.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 17 \n",
      "Experiment: video_2021-11-05T10_39_06_arena11.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 18 \n",
      "Experiment: video_2021-11-05T10_39_06_arena12.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 19 \n",
      "Experiment: video_2021-11-05T10_39_06_arena13.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 20 \n",
      "Experiment: video_2021-11-05T10_39_06_arena14.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 21 \n",
      "Experiment: video_2021-11-05T10_39_06_arena16.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 22 \n",
      "Experiment: video_2021-11-05T10_39_06_arena3.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 23 \n",
      "Experiment: video_2021-11-05T10_39_06_arena4.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 24 \n",
      "Experiment: video_2021-11-05T10_39_06_arena5.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 25 \n",
      "Experiment: video_2021-11-05T10_39_06_arena6.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 26 \n",
      "Experiment: video_2021-11-05T10_39_06_arena7.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 27 \n",
      "Experiment: video_2021-11-05T10_39_06_arena8.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 28 \n",
      "Experiment: video_2021-11-05T10_39_06_arena9.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 29 \n",
      "Experiment: video_2021-11-05T11_43_44_arena1.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 30 \n",
      "Experiment: video_2021-11-05T11_43_44_arena10.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 31 \n",
      "Experiment: video_2021-11-05T11_43_44_arena11.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 32 \n",
      "Experiment: video_2021-11-05T11_43_44_arena12.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 33 \n",
      "Experiment: video_2021-11-05T11_43_44_arena2.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 34 \n",
      "Experiment: video_2021-11-05T11_43_44_arena3.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 35 \n",
      "Experiment: video_2021-11-05T11_43_44_arena4.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 36 \n",
      "Experiment: video_2021-11-05T11_43_44_arena5.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 37 \n",
      "Experiment: video_2021-11-05T11_43_44_arena6.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 38 \n",
      "Experiment: video_2021-11-05T11_43_44_arena7.csv \n",
      "Condition: single_pair \n",
      "\n",
      "Iteration: 39 \n",
      "Experiment: video_2021-11-05T11_43_44_arena9.csv \n",
      "Condition: single_pair \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>is_painted</th>\n",
       "      <th>first_copulation_end_frame</th>\n",
       "      <th>first_copulation_latency</th>\n",
       "      <th>first_copulation_latency_mins</th>\n",
       "      <th>first_copulation_duration</th>\n",
       "      <th>first_copulation_duration_mins</th>\n",
       "      <th>second_copulation_end_frame</th>\n",
       "      <th>second_copulation_latency</th>\n",
       "      <th>second_copulation_latency_mins</th>\n",
       "      <th>second_copulation_duration</th>\n",
       "      <th>second_copulation_duration_mins</th>\n",
       "      <th>condition</th>\n",
       "      <th>experiment</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>True</td>\n",
       "      <td>60807</td>\n",
       "      <td>26718</td>\n",
       "      <td>7.421667</td>\n",
       "      <td>34089</td>\n",
       "      <td>9.469167</td>\n",
       "      <td>184210.0</td>\n",
       "      <td>82829.0</td>\n",
       "      <td>23.008056</td>\n",
       "      <td>40574.0</td>\n",
       "      <td>11.270556</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>video_2021-10-25T10_37_53_arena10.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>True</td>\n",
       "      <td>87057</td>\n",
       "      <td>28751</td>\n",
       "      <td>7.986389</td>\n",
       "      <td>58306</td>\n",
       "      <td>16.196111</td>\n",
       "      <td>145923.0</td>\n",
       "      <td>17753.0</td>\n",
       "      <td>4.931389</td>\n",
       "      <td>41113.0</td>\n",
       "      <td>11.420278</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>video_2021-10-25T10_37_53_arena2.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>False</td>\n",
       "      <td>58841</td>\n",
       "      <td>28271</td>\n",
       "      <td>7.853056</td>\n",
       "      <td>30570</td>\n",
       "      <td>8.491667</td>\n",
       "      <td>96560.0</td>\n",
       "      <td>2673.0</td>\n",
       "      <td>0.742500</td>\n",
       "      <td>35046.0</td>\n",
       "      <td>9.735000</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>video_2021-10-25T10_37_53_arena3.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>False</td>\n",
       "      <td>84435</td>\n",
       "      <td>31252</td>\n",
       "      <td>8.681111</td>\n",
       "      <td>53183</td>\n",
       "      <td>14.773056</td>\n",
       "      <td>171536.0</td>\n",
       "      <td>37994.0</td>\n",
       "      <td>10.553889</td>\n",
       "      <td>49107.0</td>\n",
       "      <td>13.640833</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>video_2021-10-25T10_37_53_arena6.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>False</td>\n",
       "      <td>81567</td>\n",
       "      <td>38949</td>\n",
       "      <td>10.819167</td>\n",
       "      <td>42618</td>\n",
       "      <td>11.838333</td>\n",
       "      <td>139152.0</td>\n",
       "      <td>14184.0</td>\n",
       "      <td>3.940000</td>\n",
       "      <td>43401.0</td>\n",
       "      <td>12.055833</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>video_2021-10-25T11_52_36_arena10.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>False</td>\n",
       "      <td>71972</td>\n",
       "      <td>13018</td>\n",
       "      <td>3.616111</td>\n",
       "      <td>58954</td>\n",
       "      <td>16.376111</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>video_2021-11-05T11_43_44_arena4.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>False</td>\n",
       "      <td>106139</td>\n",
       "      <td>44519</td>\n",
       "      <td>12.366389</td>\n",
       "      <td>61620</td>\n",
       "      <td>17.116667</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>video_2021-11-05T11_43_44_arena5.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>False</td>\n",
       "      <td>81771</td>\n",
       "      <td>21994</td>\n",
       "      <td>6.109444</td>\n",
       "      <td>59777</td>\n",
       "      <td>16.604722</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>video_2021-11-05T11_43_44_arena6.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>False</td>\n",
       "      <td>72612</td>\n",
       "      <td>18999</td>\n",
       "      <td>5.277500</td>\n",
       "      <td>53613</td>\n",
       "      <td>14.892500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>video_2021-11-05T11_43_44_arena7.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>101</th>\n",
       "      <td>False</td>\n",
       "      <td>74999</td>\n",
       "      <td>12341</td>\n",
       "      <td>3.428056</td>\n",
       "      <td>62658</td>\n",
       "      <td>17.405000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>video_2021-11-05T11_43_44_arena9.csv</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>102 rows × 13 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     is_painted  first_copulation_end_frame  first_copulation_latency  \\\n",
       "0          True                       60807                     26718   \n",
       "1          True                       87057                     28751   \n",
       "2         False                       58841                     28271   \n",
       "3         False                       84435                     31252   \n",
       "4         False                       81567                     38949   \n",
       "..          ...                         ...                       ...   \n",
       "97        False                       71972                     13018   \n",
       "98        False                      106139                     44519   \n",
       "99        False                       81771                     21994   \n",
       "100       False                       72612                     18999   \n",
       "101       False                       74999                     12341   \n",
       "\n",
       "     first_copulation_latency_mins  first_copulation_duration  \\\n",
       "0                         7.421667                      34089   \n",
       "1                         7.986389                      58306   \n",
       "2                         7.853056                      30570   \n",
       "3                         8.681111                      53183   \n",
       "4                        10.819167                      42618   \n",
       "..                             ...                        ...   \n",
       "97                        3.616111                      58954   \n",
       "98                       12.366389                      61620   \n",
       "99                        6.109444                      59777   \n",
       "100                       5.277500                      53613   \n",
       "101                       3.428056                      62658   \n",
       "\n",
       "     first_copulation_duration_mins  second_copulation_end_frame  \\\n",
       "0                          9.469167                     184210.0   \n",
       "1                         16.196111                     145923.0   \n",
       "2                          8.491667                      96560.0   \n",
       "3                         14.773056                     171536.0   \n",
       "4                         11.838333                     139152.0   \n",
       "..                              ...                          ...   \n",
       "97                        16.376111                          NaN   \n",
       "98                        17.116667                          NaN   \n",
       "99                        16.604722                          NaN   \n",
       "100                       14.892500                          NaN   \n",
       "101                       17.405000                          NaN   \n",
       "\n",
       "     second_copulation_latency  second_copulation_latency_mins  \\\n",
       "0                      82829.0                       23.008056   \n",
       "1                      17753.0                        4.931389   \n",
       "2                       2673.0                        0.742500   \n",
       "3                      37994.0                       10.553889   \n",
       "4                      14184.0                        3.940000   \n",
       "..                         ...                             ...   \n",
       "97                         NaN                             NaN   \n",
       "98                         NaN                             NaN   \n",
       "99                         NaN                             NaN   \n",
       "100                        NaN                             NaN   \n",
       "101                        NaN                             NaN   \n",
       "\n",
       "     second_copulation_duration  second_copulation_duration_mins  \\\n",
       "0                       40574.0                        11.270556   \n",
       "1                       41113.0                        11.420278   \n",
       "2                       35046.0                         9.735000   \n",
       "3                       49107.0                        13.640833   \n",
       "4                       43401.0                        12.055833   \n",
       "..                          ...                              ...   \n",
       "97                          NaN                              NaN   \n",
       "98                          NaN                              NaN   \n",
       "99                          NaN                              NaN   \n",
       "100                         NaN                              NaN   \n",
       "101                         NaN                              NaN   \n",
       "\n",
       "            condition                             experiment  \n",
       "0    free_competition  video_2021-10-25T10_37_53_arena10.csv  \n",
       "1    free_competition   video_2021-10-25T10_37_53_arena2.csv  \n",
       "2    free_competition   video_2021-10-25T10_37_53_arena3.csv  \n",
       "3    free_competition   video_2021-10-25T10_37_53_arena6.csv  \n",
       "4    free_competition  video_2021-10-25T11_52_36_arena10.csv  \n",
       "..                ...                                    ...  \n",
       "97        single_pair   video_2021-11-05T11_43_44_arena4.csv  \n",
       "98        single_pair   video_2021-11-05T11_43_44_arena5.csv  \n",
       "99        single_pair   video_2021-11-05T11_43_44_arena6.csv  \n",
       "100       single_pair   video_2021-11-05T11_43_44_arena7.csv  \n",
       "101       single_pair   video_2021-11-05T11_43_44_arena9.csv  \n",
       "\n",
       "[102 rows x 13 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "copulation_df = pd.DataFrame()\n",
    "for condition in condition_order:\n",
    "    for h, experiment_path in enumerate(experiments[condition]):\n",
    "\n",
    "        experiment = os.path.basename(experiment_path)\n",
    "        \n",
    "        print('Iteration:', h, '\\nExperiment:', experiment, '\\nCondition:', condition, '\\n')\n",
    "        \n",
    "        annotation_video = annotations.read(experiment_path)\n",
    "        \n",
    "        # This fetches \"competition\" condition information.\n",
    "        try:\n",
    "            first_copulation = annotation_video[0].events[0]\n",
    "            first_copulation_latency =  first_copulation.time\n",
    "            first_copulation_latency_mins = first_copulation_latency / (60 * FPS)\n",
    "            first_copulation_duration = first_copulation.duration\n",
    "            first_copulation_duration_mins = first_copulation_duration / (60 * FPS)\n",
    "            \n",
    "            second_copulation = annotation_video[0].events[1]\n",
    "            second_copulation_latency =  second_copulation.time - first_copulation.time_interval[1] if condition=='free_competition' else second_copulation.time - annotation_video[2].events[0].time\n",
    "            second_copulation_latency_mins = second_copulation_latency / (60 * FPS)\n",
    "            second_copulation_duration = second_copulation.duration\n",
    "            second_copulation_duration_mins = second_copulation_duration / (60 * FPS)\n",
    "\n",
    "            copulation_data = pd.DataFrame({'is_painted': True if first_copulation.comment.split('_')[0] == 'painted' else False,\n",
    "                                            'first_copulation_end_frame': first_copulation.time_interval[1],\n",
    "                                            'first_copulation_latency': first_copulation_latency,\n",
    "                                            'first_copulation_latency_mins': first_copulation_latency_mins,\n",
    "                                            'first_copulation_duration': first_copulation_duration,\n",
    "                                            'first_copulation_duration_mins': first_copulation_duration_mins,\n",
    "                                            'second_copulation_end_frame': second_copulation.time_interval[1],\n",
    "                                            'second_copulation_latency': second_copulation_latency,\n",
    "                                            'second_copulation_latency_mins': second_copulation_latency_mins,\n",
    "                                            'second_copulation_duration': second_copulation_duration,\n",
    "                                            'second_copulation_duration_mins': second_copulation_duration_mins,\n",
    "                                            'condition': condition,\n",
    "                                            'experiment': experiment},\n",
    "                                            index=[h],\n",
    "                                           )\n",
    "\n",
    "        # This fetches \"single_pair\" condition information.\n",
    "        except IndexError:\n",
    "            copulation_data = pd.DataFrame({'is_painted': True if first_copulation.comment.split('_')[0] == 'painted' else False,\n",
    "                                            'first_copulation_end_frame': first_copulation.time_interval[1],\n",
    "                                            'first_copulation_latency': first_copulation_latency,\n",
    "                                            'first_copulation_latency_mins': first_copulation_latency_mins,\n",
    "                                            'first_copulation_duration': first_copulation_duration,\n",
    "                                            'first_copulation_duration_mins': first_copulation_duration_mins,\n",
    "                                            'second_copulation_end_frame': np.nan,\n",
    "                                            'second_copulation_latency': np.nan,\n",
    "                                            'second_copulation_latency_mins': np.nan,\n",
    "                                            'second_copulation_duration': np.nan,\n",
    "                                            'second_copulation_duration_mins': np.nan,\n",
    "                                            'condition': condition,\n",
    "                                            'experiment': experiment},\n",
    "                                            index=[h],\n",
    "                                           )\n",
    "\n",
    "        # Concatenate all data together.\n",
    "        copulation_df = pd.concat([copulation_df, copulation_data], ignore_index=True)\n",
    "\n",
    "copulation_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Latency to Second Copulation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>condition</th>\n",
       "      <th>second_copulation_latency_mins</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>free_competition</td>\n",
       "      <td>23.008056</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>free_competition</td>\n",
       "      <td>4.931389</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>free_competition</td>\n",
       "      <td>0.742500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>free_competition</td>\n",
       "      <td>10.553889</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>free_competition</td>\n",
       "      <td>3.940000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>partitioned_competition</td>\n",
       "      <td>18.851667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>58</th>\n",
       "      <td>partitioned_competition</td>\n",
       "      <td>1.891667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>partitioned_competition</td>\n",
       "      <td>2.500556</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>partitioned_competition</td>\n",
       "      <td>2.191944</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>partitioned_competition</td>\n",
       "      <td>5.759444</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>62 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                  condition  second_copulation_latency_mins\n",
       "0          free_competition                       23.008056\n",
       "1          free_competition                        4.931389\n",
       "2          free_competition                        0.742500\n",
       "3          free_competition                       10.553889\n",
       "4          free_competition                        3.940000\n",
       "..                      ...                             ...\n",
       "57  partitioned_competition                       18.851667\n",
       "58  partitioned_competition                        1.891667\n",
       "59  partitioned_competition                        2.500556\n",
       "60  partitioned_competition                        2.191944\n",
       "61  partitioned_competition                        5.759444\n",
       "\n",
       "[62 rows x 2 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "latency_df = copulation_df.query('condition!=\"single_pair\"').copy()\n",
    "latency_df = latency_df[['condition', 'second_copulation_latency_mins']]\n",
    "latency_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Statistics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shapiro's Test: group 1 IS NOT normally distributed.\n",
      "D'Agostino's Test: group 1 IS NOT normally distributed.\n",
      "Shapiro's Test: group 2 IS NOT normally distributed.\n",
      "D'Agostino's Test: group 2 IS normally distributed.\n",
      "Levene's Test for non-normally distributed samples:\n",
      "  p-value = 0.941207\n",
      "  All groups were sampled from populations with IDENTICAL variances.\n",
      "\n",
      "Mann-Whitney p-value: 0.13960631054586453 \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'partitioned_competition': 0.13960631054586453}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "latencies_pvalues = {}\n",
    "\n",
    "control = latency_df.query('condition==\"free_competition\"')['second_copulation_latency_mins']\n",
    "\n",
    "for condition in condition_order[1:2]:\n",
    "\n",
    "    try:\n",
    "        test = latency_df.query('condition==\"' + condition + '\"')['second_copulation_latency_mins']\n",
    "\n",
    "        temp_values = {'control': control, 'test': test}\n",
    "        \n",
    "        pvalue_condition = helpers.run_statistics(temp_values)\n",
    "\n",
    "        latencies_pvalues[condition] = pvalue_condition\n",
    "\n",
    "    except ValueError as error:\n",
    "        print(error)\n",
    "\n",
    "latencies_pvalues"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Effect Size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Vestigial Effect: -0.10696920583468389 \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'partitioned_competition': -0.10696920583468389}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "latencies_effect_sizes = {}\n",
    "\n",
    "control = latency_df.query('condition==\"free_competition\"')['second_copulation_latency_mins']\n",
    "\n",
    "for condition in condition_order[1:2]:\n",
    "    \n",
    "    test = latency_df.query('condition==\"' + condition + '\"')['second_copulation_latency_mins']\n",
    "\n",
    "    median_diff = helpers.get_effect_size(control, test, method='median_diff')\n",
    "\n",
    "    latencies_effect_sizes[condition] = median_diff\n",
    "    \n",
    "latencies_effect_sizes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 180x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Initialize figure.\n",
    "n_conditions = latency_df['condition'].nunique()\n",
    "figure, axis = plt.subplots(figsize=(1.25*n_conditions, 4))\n",
    "\n",
    "# Draw the boxplot.\n",
    "sns.boxplot(x='condition',\n",
    "            y='second_copulation_latency_mins',\n",
    "            data=latency_df,\n",
    "            palette=['#3c096c', '#7b2cbf'],\n",
    "            width=0.6,\n",
    "            showfliers=False,\n",
    "            boxprops={'edgecolor': INK},\n",
    "            medianprops={'color': INK},\n",
    "            whiskerprops={'color': INK},\n",
    "            capprops={'color': INK}\n",
    "           )\n",
    "\n",
    "# Draw the swarmplot.\n",
    "sns.swarmplot(x='condition',\n",
    "              y='second_copulation_latency_mins',\n",
    "              data=latency_df,\n",
    "              palette=['#3c096c', '#7b2cbf'],\n",
    "              linewidth=0.75,\n",
    "              edgecolor=INK,\n",
    "              dodge=True\n",
    "             )\n",
    "\n",
    "# Figure and axes formatting.\n",
    "axis.set_xlabel('')\n",
    "axis.set_xticklabels([''])\n",
    "axis.set_ylabel('Copulation Latency (min.)')\n",
    "axis.set_ylim(0, 25)\n",
    "axis.set_yticks(np.arange(0, 25+1, 5))\n",
    "\n",
    "# Table definition.\n",
    "row1 = [str(latency_df.query('condition==\"'+condition+'\"').shape[0]) for condition in condition_order[:2]]\n",
    "row2 = ['With\\naggression', 'Without\\naggression\\n(Partition)']\n",
    "cell_text = np.array([row1, row2])\n",
    "\n",
    "row_labels = ['n =', '']\n",
    "summary_table = axis.table(cellText= cell_text,\n",
    "                           cellLoc='center',\n",
    "                           rowLabels=row_labels,\n",
    "                           rowLoc='center',\n",
    "                           colLoc='center'\n",
    "                          )\n",
    "\n",
    "summary_table.auto_set_font_size(False)\n",
    "summary_table.set_fontsize(11)\n",
    "\n",
    "properties = summary_table.properties()\n",
    "table_cells = properties['children']\n",
    "for cell in table_cells:\n",
    "    cell.set_height(0.12)\n",
    "    cell.set_alpha(0)\n",
    "\n",
    "# Draw statistical result.\n",
    "for p, condition in enumerate(condition_order[1:2]):\n",
    "    sig_height = 6 if (latencies_pvalues.get(condition, 'NaN') == 'NaN') or (latencies_pvalues.get(condition, 'NaN') >= 0.05) else 2\n",
    "    helpers.plot_stattest_result(ax=axis,\n",
    "                                 x1=p+1,\n",
    "                                 x2=p+1,\n",
    "                                 p_value=latencies_pvalues.get(condition, 'NaN'),\n",
    "                                 y=24,\n",
    "                                 ticksize=0,\n",
    "                                 xytext=(0,sig_height),\n",
    "                                 fontsize=13,\n",
    "                                 color=INK,\n",
    "                                 connector_color=INK\n",
    "                                )\n",
    "\n",
    "# Saving parameters.\n",
    "filename = 'latency_to_second_copulation'\n",
    "plt.savefig(os.path.join(savepath, filename))\n",
    "\n",
    "plt.show()\n",
    "plt.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## First Copulation Duration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>condition</th>\n",
       "      <th>first_copulation_duration_mins</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>free_competition</td>\n",
       "      <td>9.469167</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>free_competition</td>\n",
       "      <td>16.196111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>free_competition</td>\n",
       "      <td>8.491667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>free_competition</td>\n",
       "      <td>14.773056</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>free_competition</td>\n",
       "      <td>11.838333</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          condition  first_copulation_duration_mins\n",
       "0  free_competition                        9.469167\n",
       "1  free_competition                       16.196111\n",
       "2  free_competition                        8.491667\n",
       "3  free_competition                       14.773056\n",
       "4  free_competition                       11.838333"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "duration_df = copulation_df[['condition', 'first_copulation_duration_mins']].copy()\n",
    "duration_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Statistics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\t partitioned_competition \n",
      "\n",
      "Shapiro's Test: group 1 IS NOT normally distributed.\n",
      "D'Agostino's Test: group 1 IS NOT normally distributed.\n",
      "Shapiro's Test: group 2 IS NOT normally distributed.\n",
      "D'Agostino's Test: group 2 IS NOT normally distributed.\n",
      "Levene's Test for non-normally distributed samples:\n",
      "  p-value = 0.022256\n",
      "  All groups were sampled from populations with NOT IDENTICAL variances.\n",
      "\n",
      "Mann-Whitney p-value: 0.28336599414329394 \n",
      "\n",
      "\n",
      "\t single_pair \n",
      "\n",
      "Shapiro's Test: group 1 IS NOT normally distributed.\n",
      "D'Agostino's Test: group 1 IS NOT normally distributed.\n",
      "Shapiro's Test: group 2 IS NOT normally distributed.\n",
      "D'Agostino's Test: group 2 IS NOT normally distributed.\n",
      "Levene's Test for non-normally distributed samples:\n",
      "  p-value = 0.731194\n",
      "  All groups were sampled from populations with IDENTICAL variances.\n",
      "\n",
      "Mann-Whitney p-value: 0.016530499040150703 \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'partitioned_competition': 0.28336599414329394,\n",
       " 'single_pair': 0.016530499040150703}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "durations_pvalues = {}\n",
    "\n",
    "control = duration_df.query('condition==\"free_competition\"')['first_copulation_duration_mins']\n",
    "\n",
    "for condition in condition_order[1:]:\n",
    "\n",
    "    print('\\n\\t', condition, '\\n')\n",
    "\n",
    "    try:\n",
    "        test = duration_df.query('condition==\"' + condition + '\"')['first_copulation_duration_mins']\n",
    "\n",
    "        temp_values = {'control': control, 'test': test}\n",
    "\n",
    "        pvalue_condition = helpers.run_statistics(temp_values)\n",
    "\n",
    "        durations_pvalues[condition] = pvalue_condition\n",
    "        \n",
    "    except ValueError as error:\n",
    "        print(error)\n",
    "    \n",
    "durations_pvalues"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Bonferroni Correction\n",
      "---------------------\n",
      "\n",
      "\tOriginal Values:\n",
      " {'partitioned_competition': 0.28336599414329394, 'single_pair': 0.016530499040150703}\n",
      "\n",
      "\tCorrected Values:\n",
      " {'partitioned_competition': 0.5667319882865879, 'single_pair': 0.033060998080301406} \n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Bonferroni corretction for multiple comparisons.\n",
    "title = 'Bonferroni Correction'\n",
    "print(title)\n",
    "print('-'*len(title))\n",
    "\n",
    "# Show uncorrected values.\n",
    "print('\\n\\tOriginal Values:\\n', durations_pvalues)\n",
    "\n",
    "# Apply the bonferroni correction for multiple comparisons.\n",
    "durations_multi_comp_correction = multipletests(pvals=list(durations_pvalues.values()), alpha=0.05, method='bonferroni')[1]\n",
    "\n",
    "# Transform the correction results into a dictionary.\n",
    "corrected_durations_pvalues = dict(zip(list(durations_pvalues.keys()), durations_multi_comp_correction))\n",
    "\n",
    "# Show corrected values.\n",
    "print('\\n\\tCorrected Values:\\n', corrected_durations_pvalues, '\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Effect Size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "partitioned_competition\n",
      "Vestigial Effect: 0.025969911287355422 \n",
      "\n",
      "single_pair\n",
      "Vestigial Effect: 0.1764339152119702 \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'partitioned_competition': 0.025969911287355422,\n",
       " 'single_pair': 0.1764339152119702}"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "durations_effect_sizes = {}\n",
    "\n",
    "control = duration_df.query('condition==\"free_competition\"')['first_copulation_duration_mins']\n",
    "\n",
    "for condition in condition_order[1:]:\n",
    "    \n",
    "    print(condition)\n",
    "    \n",
    "    test = duration_df.query('condition==\"' + condition +'\"')['first_copulation_duration_mins']\n",
    "\n",
    "    median_diff = helpers.get_effect_size(control, test, method='median_diff')\n",
    "\n",
    "    durations_effect_sizes[condition] = median_diff\n",
    "    \n",
    "durations_effect_sizes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 270x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Initialize figure.\n",
    "n_conditions = duration_df['condition'].nunique()\n",
    "figure, axis = plt.subplots(figsize=(1.25*n_conditions, 4))\n",
    "\n",
    "# Draw the boxplot.\n",
    "sns.boxplot(x='condition',\n",
    "            y='first_copulation_duration_mins',\n",
    "            data=duration_df,\n",
    "            order=condition_order,\n",
    "            palette=['#3c096c', '#7b2cbf', '#c77dff'],\n",
    "            width=0.6,\n",
    "            showfliers=False,\n",
    "            boxprops={'edgecolor': INK},\n",
    "            medianprops={'color': INK},\n",
    "            whiskerprops={'color': INK},\n",
    "            capprops={'color': INK}\n",
    "           )\n",
    "\n",
    "# Draw the swarmplot.\n",
    "sns.swarmplot(x='condition',\n",
    "              y='first_copulation_duration_mins',\n",
    "              data=duration_df,\n",
    "              order=condition_order,\n",
    "              palette=['#3c096c', '#7b2cbf', '#c77dff'],\n",
    "              linewidth=0.75,\n",
    "              edgecolor=INK\n",
    "             )\n",
    "\n",
    "# Figure and axes formatting.\n",
    "axis.set_xlabel('')\n",
    "axis.set_xticklabels([''])\n",
    "axis.set_ylabel('Copulation Duration (min.)')\n",
    "axis.set_ylim(0, 30)\n",
    "axis.set_yticks(np.arange(0, 30+1, 5))\n",
    "\n",
    "# Table definition.\n",
    "row1 = [str(duration_df.query('condition==\"'+condition+'\"').shape[0]) for condition in condition_order]\n",
    "row2 = ['With\\naggression', 'Without\\naggression\\n(Partition)', 'Without\\naggression\\n(Single couple)']\n",
    "cell_text = np.array([row1, row2])\n",
    "\n",
    "row_labels = ['n =', '']\n",
    "summary_table = axis.table(cellText= cell_text,\n",
    "                           cellLoc='center',\n",
    "                           rowLabels=row_labels,\n",
    "                           rowLoc='center',\n",
    "                           colLoc='center'\n",
    "                          )\n",
    "\n",
    "summary_table.auto_set_font_size(False)\n",
    "summary_table.set_fontsize(11)\n",
    "\n",
    "properties = summary_table.properties()\n",
    "table_cells = properties['children']\n",
    "for cell in table_cells:\n",
    "    cell.set_height(0.12)\n",
    "    cell.set_alpha(0)\n",
    "\n",
    "# Draw statistical result.\n",
    "for p, condition in enumerate(condition_order[1:]):\n",
    "    sig_height = 6 if (corrected_durations_pvalues.get(condition, 'NaN') == 'NaN') or (corrected_durations_pvalues.get(condition, 'NaN') >= 0.05) else 2\n",
    "    helpers.plot_stattest_result(ax=axis,\n",
    "                                 x1=p+1,\n",
    "                                 x2=p+1,\n",
    "                                 p_value=corrected_durations_pvalues.get(condition, 'NaN'),\n",
    "                                 y=29,\n",
    "                                 ticksize=0,\n",
    "                                 xytext=(0,sig_height),\n",
    "                                 fontsize=13,\n",
    "                                 color=INK,\n",
    "                                 connector_color=INK\n",
    "                                )\n",
    "\n",
    "# Saving parameters.\n",
    "filename = 'first_copulation_duration'\n",
    "plt.savefig(os.path.join(savepath, filename))\n",
    "\n",
    "plt.show()\n",
    "plt.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
